
package appvideo.persistencia;

import appvideo.logica.Promociones;
import java.sql.*;
import appvideo.logica.PromocionesDiasSemana;
import appvideo.logica.PromocionesGenero;
import appvideo.logica.PromocionesMasPorMenos;
import appvideo.logica.PromocionesPuntos;
import appvideo.ObtenerTeclado;
import java.text.*; //utilizado para formatear Fechas
import java.util.*;

public class PersistenciaPromocion {
    public static int ejecuta(String pQuery){
        int cuenta=0;
        
        Connection cn=null;
        cn = Persistencia_Conexion.getConnection();
        Statement st = null;        
        
        try {
            st = cn.createStatement();           
            cuenta = st.executeUpdate(pQuery);     
                                    
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        } catch(Exception e){
            System.out.println(e.getMessage());
        }
        finally{
            try {                
                st.close();
                st=null;
                cn.close();
                cn=null;
            } catch (SQLException sqlex) {
                System.out.println(sqlex.getMessage());
            }  catch(Exception e){
                System.out.println(e.getMessage());
            } 
        }                        
        return cuenta;
    }           
    public static void insertaNuevoDiaFeliz(PromocionesDiasSemana newPromo) throws SQLException{
        int cuenta;
        String query;             
        SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");               
        
        //Inserta información GENERICA de la promoción
        //NOTA: Debería obtener '"+newPromo.getUsuario()+"' en lugar de 1
        query = "INSERT INTO promociondiafeliz (pdf_nom, pdf_fei, pdf_fef, pdf_act, pdf_dia, pdf_des)" 
                + " values ('"+newPromo.getNombre()+"','"+f.format(newPromo.getFechaInicio())+"','"+f.format(newPromo.getFechaFinal())+"',"
                + ""+true+","+newPromo.getDia()+","+newPromo.getDescuento()+""
                + ")";        
        cuenta = ejecuta(query);
                      
        if(cuenta>0){
            String resp = " " + ObtenerTeclado.dameTecla("Promoción almacenada");
            //System.out.println("Promoción almacenada");            
        }else{
            String resp = " " + ObtenerTeclado.dameTecla("No se almacenó la Promoción");
        }        
    }        
    public static List<PromocionesDiasSemana> getPromociones(String filtro){
        List<PromocionesDiasSemana> prom = new ArrayList();

        java.util.Date fechaActual = new java.util.Date(); //Obtiene la fecha de hoy
        SimpleDateFormat nDia = new SimpleDateFormat("EEEE");   
        String n = nDia.format(fechaActual).toUpperCase();
        
        Map dias = new HashMap();

        dias.put("LUNES",1);
        dias.put("MARTES",2);
        dias.put("MIERCOLES",3);
        dias.put("JUEVES",4);
        dias.put("VIERNES",5);
        dias.put("SABADO",6);
        dias.put("DOMINGO",7);
        
        Integer numeroDia = (Integer) dias.get(n);          
        
        Connection con = Persistencia_Conexion.getConnection();
        Statement st=null;
        ResultSet rs=null;
        try {
            st = con.createStatement();
            //Esta consulta coge todos los datos necesarios para crear el empleado y su salario de la base de datos
            String query = "SELECT promociondiafeliz.pdf_id,promociondiafeliz.pdf_nom,promociondiafeliz.pdf_fei,"
                + "promociondiafeliz.pdf_fef,promociondiafeliz.pdf_act,"
                + "promociondiafeliz.pdf_dia,promociondiafeliz.pdf_des FROM promociondiafeliz";
            
            if(!"*".equals(filtro)){
                query = query + " WHERE promociondiafeliz.pdf_nom = '" + filtro + "'";
            }
            
            rs = st.executeQuery(query);
            
            while(rs.next()){               
                
                PromocionesDiasSemana e = new PromocionesDiasSemana(rs.getInt("pdf_id"),rs.getString("pdf_nom"),
                    rs.getDate("pdf_fei"),rs.getDate("pdf_fef"),rs.getBoolean("pdf_act"),
                    rs.getInt("pdf_dia"),rs.getInt("pdf_des"),"Día Feliz");
                
                prom.add(e);
            }
            
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        } catch(Exception e){
            System.out.println(e.getMessage());
        }
        finally{
            try {
                rs.close();
                st.close();
                con.close();
            } catch (SQLException sqlex) {
                System.out.println(sqlex.getMessage());
            }  catch(Exception e){
                System.out.println(e.getMessage());
            } 
        }
        return prom;
    }
    public static void modificaNuevoDiaFeliz(PromocionesDiasSemana modificaPromo) throws SQLException{
        int cuenta;
        String query;             
        SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");               
        
        //Inserta información GENERICA de la promoción
        //NOTA: Debería obtener '"+newPromo.getUsuario()+"' en lugar de 1
        query = "UPDATE promociondiafeliz set "                
              + "pdf_nom ='"+modificaPromo.getNombre()+"',"
              + "pdf_fei ='"+f.format(modificaPromo.getFechaInicio())+"',"
              + "pdf_fef ='"+f.format(modificaPromo.getFechaFinal())+"',"
              + "pdf_act ="+modificaPromo.isActiva()+","
              + "pdf_dia ="+modificaPromo.getDia()+","
              + "pdf_des ="+modificaPromo.getDescuento()+""
              + " WHERE pdf_id = " +modificaPromo.getId();
                                  
        cuenta = ejecuta(query);
                      
        if(cuenta>0){            
            String resp = " " + ObtenerTeclado.dameTecla("Se modificó la promoción");            
        }else{
            String resp = " " + ObtenerTeclado.dameTecla("No se pudo modificar la promoción");
        }        
    }      
    public static void insertaNuevoGenero(PromocionesGenero newPromo) throws SQLException{
        int cuenta;
        String query;             
        SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");               
        
        //Inserta información GENERICA de la promoción
        //NOTA: Debería obtener '"+newPromo.getUsuario()+"' en lugar de 1
        query = "INSERT INTO promociongenero (pge_nom, pge_fei, pge_fef, pge_act, pge_gen, pge_des)" 
                + " values ('"+newPromo.getNombre()+"','"+f.format(newPromo.getFechaInicio())+"','"+f.format(newPromo.getFechaFinal())+"',"
                + ""+true+",'"+newPromo.getNombreGenero()+"',"+newPromo.getDescuento()+""
                + ")";        
        cuenta = ejecuta(query);
                      
        if(cuenta>0){            
            String resp = " " + ObtenerTeclado.dameTecla("Promoción almacenada");            
        }else{
            String resp = " " + ObtenerTeclado.dameTecla("No se almacenó la Promoción");
        }        
    }    
    public static List<PromocionesGenero> getPromocionesGenero(String filtro){
        List<PromocionesGenero> prom = new ArrayList();
        
        Connection con = Persistencia_Conexion.getConnection();
        Statement st=null;
        ResultSet rs=null;
        try {
            st = con.createStatement();
            //Esta consulta coge todos los datos necesarios para crear el empleado y su salario de la base de datos
            String query = "SELECT promociongenero.pge_id,promociongenero.pge_nom,promociongenero.pge_fei,"
                + "promociongenero.pge_fef,promociongenero.pge_act,"
                + "promociongenero.pge_gen,promociongenero.pge_des FROM promociongenero";
            
            if(!"*".equals(filtro)){
                query = query + " WHERE promociongenero.pge_nom = '" + filtro + "'";
            }
            
            rs = st.executeQuery(query);
            
            while(rs.next()){               
                
                PromocionesGenero e = new PromocionesGenero(rs.getInt("pge_id"),rs.getString("pge_nom"),
                    rs.getDate("pge_fei"),rs.getDate("pge_fef"),rs.getBoolean("pge_act"),
                    rs.getString("pge_gen"),rs.getInt("pge_des"),"Género");
                
                prom.add(e);
            }
            
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        } catch(Exception e){
            System.out.println(e.getMessage());
        }
        finally{
            try {
                rs.close();
                st.close();
                con.close();
            } catch (SQLException sqlex) {
                System.out.println(sqlex.getMessage());
            }  catch(Exception e){
                System.out.println(e.getMessage());
            } 
        }
        return prom;
    }
    public static void modificaGenero(PromocionesGenero modificaPromo) throws SQLException{
        int cuenta;
        String query;             
        SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");               
        
        //Inserta información GENERICA de la promoción
        //NOTA: Debería obtener '"+newPromo.getUsuario()+"' en lugar de 1
        query = "UPDATE promociongenero set "                
              + "pge_nom ='"+modificaPromo.getNombre()+"',"
              + "pge_fei ='"+f.format(modificaPromo.getFechaInicio())+"',"
              + "pge_fef ='"+f.format(modificaPromo.getFechaFinal())+"',"
              + "pge_act ="+modificaPromo.isActiva()+","
              + "pge_gen ='"+modificaPromo.getNombreGenero()+"',"
              + "pge_des ="+modificaPromo.getDescuento()+""
              + " WHERE pge_id = " +modificaPromo.getId();
                                  
        cuenta = ejecuta(query);
                      
        if(cuenta>0){            
            String resp = " " + ObtenerTeclado.dameTecla("Promoción almacenada");            
        }else{
            String resp = " " + ObtenerTeclado.dameTecla("No se almacenó la Promoción");
        }        
    }     
    public static void insertaMasPorMenos(PromocionesMasPorMenos newPromo) throws SQLException{
        int cuenta;
        String query;             
        SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");               
        
        //Inserta información GENERICA de la promoción
        //NOTA: Debería obtener '"+newPromo.getUsuario()+"' en lugar de 1
        query = "INSERT INTO promocionmaspormenos (pmm_nom, pmm_fei, pmm_fef, pmm_act, pmm_alq, pmm_ent)" 
                + " values ('"+newPromo.getNombre()+"','"+f.format(newPromo.getFechaInicio())+"','"+f.format(newPromo.getFechaFinal())+"',"
                + ""+true+",'"+newPromo.getNoAlquilados()+"',"+newPromo.getNoEntregados()+""
                + ")";        
        cuenta = ejecuta(query);
                      
        if(cuenta>0){            
            String resp = " " + ObtenerTeclado.dameTecla("Promoción almacenada");            
        }else{
            String resp = " " + ObtenerTeclado.dameTecla("No se almacenó la Promoción");
        }        
    }  
    public static List<PromocionesMasPorMenos> getPromocionesMasPorMenos(String filtro){
        List<PromocionesMasPorMenos> prom = new ArrayList();
        
        Connection con = Persistencia_Conexion.getConnection();
        Statement st=null;
        ResultSet rs=null;
        try {
            st = con.createStatement();
            //Esta consulta coge todos los datos necesarios para crear el empleado y su salario de la base de datos
            String query = "SELECT promocionmaspormenos.pmm_id,promocionmaspormenos.pmm_nom,promocionmaspormenos.pmm_fei,"
                + "promocionmaspormenos.pmm_fef,promocionmaspormenos.pmm_act,"
                + "promocionmaspormenos.pmm_alq,promocionmaspormenos.pmm_ent FROM promocionmaspormenos";
            
            if(!"*".equals(filtro)){
                query = query + " WHERE promocionmaspormenos.pmm_nom = '" + filtro + "'";
            }
            
            rs = st.executeQuery(query);
            
            while(rs.next()){               
                
                PromocionesMasPorMenos e = new PromocionesMasPorMenos(rs.getInt("pmm_id"),rs.getString("pmm_nom"),
                    rs.getDate("pmm_fei"),rs.getDate("pmm_fef"),rs.getBoolean("pmm_act"),
                    rs.getInt("pmm_alq"),rs.getInt("pmm_ent"),"Más por Menos");
                
                prom.add(e);
            }
            
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        } catch(Exception e){
            System.out.println(e.getMessage());
        }
        finally{
            try {
                rs.close();
                st.close();
                con.close();
            } catch (SQLException sqlex) {
                System.out.println(sqlex.getMessage());
            }  catch(Exception e){
                System.out.println(e.getMessage());
            } 
        }
        return prom;
    }    
    public static void modificaMasPorMenos(PromocionesMasPorMenos modificaPromo) throws SQLException{
        int cuenta;
        String query;             
        SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");               
        
        //Inserta información GENERICA de la promoción
        //NOTA: Debería obtener '"+newPromo.getUsuario()+"' en lugar de 1
        query = "UPDATE promocionmaspormenos set "                
              + "pmm_nom ='"+modificaPromo.getNombre()+"',"
              + "pmm_fei ='"+f.format(modificaPromo.getFechaInicio())+"',"
              + "pmm_fef ='"+f.format(modificaPromo.getFechaFinal())+"',"
              + "pmm_act ="+modificaPromo.isActiva()+","
              + "pmm_alq ="+modificaPromo.getNoAlquilados()+","
              + "pmm_ent ="+modificaPromo.getNoEntregados()+""
              + " WHERE pmm_id = " +modificaPromo.getId();
                                  
        cuenta = ejecuta(query);
                      
        if(cuenta>0){            
            String resp = " " + ObtenerTeclado.dameTecla("Promoción almacenada");            
        }else{
            String resp = " " + ObtenerTeclado.dameTecla("No se almacenó la Promoción");
        }        
    }  
    public static void insertaPuntos(PromocionesPuntos newPromo) throws SQLException{
        int cuenta;
        String query;             
        SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");               
        
        //Inserta información GENERICA de la promoción
        //NOTA: Debería obtener '"+newPromo.getUsuario()+"' en lugar de 1
        query = "INSERT INTO promocionpuntos (ppu_nom, ppu_fei, ppu_fef, ppu_act, ppu_pun)" 
                + " values ('"+newPromo.getNombre()+"','"+f.format(newPromo.getFechaInicio())+"','"+f.format(newPromo.getFechaFinal())+"',"
                + ""+true+","+newPromo.getPuntos()+""
                + ")";        
        cuenta = ejecuta(query);
                      
        if(cuenta>0){            
            String resp = " " + ObtenerTeclado.dameTecla("Promoción almacenada");            
        }else{
            String resp = " " + ObtenerTeclado.dameTecla("No se almacenó la Promoción");
        }        
    }  
    public static List<PromocionesPuntos> getPromocionesPuntos(String filtro){
        List<PromocionesPuntos> prom = new ArrayList();
        
        Connection con = Persistencia_Conexion.getConnection();
        Statement st=null;
        ResultSet rs=null;
        try {
            st = con.createStatement();
            //Esta consulta coge todos los datos necesarios para crear el empleado y su salario de la base de datos
            String query = "SELECT promocionpuntos.ppu_id,promocionpuntos.ppu_nom,promocionpuntos.ppu_fei,"
                + "promocionpuntos.ppu_fef,promocionpuntos.ppu_act,"
                + "promocionpuntos.ppu_pun FROM promocionpuntos";
            
            if(!"*".equals(filtro)){
                query = query + " WHERE promocionpuntos.ppu_nom = '" + filtro + "'";
            }
            
            rs = st.executeQuery(query);
            
            while(rs.next()){               
                
                PromocionesPuntos e = new PromocionesPuntos(rs.getInt("ppu_id"),rs.getString("ppu_nom"),
                    rs.getDate("ppu_fei"),rs.getDate("ppu_fef"),rs.getBoolean("ppu_act"),
                    rs.getInt("ppu_pun"),"Puntos");
                
                prom.add(e);
            }
            
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        } catch(Exception e){
            System.out.println(e.getMessage());
        }
        finally{
            try {
                rs.close();
                st.close();
                con.close();
            } catch (SQLException sqlex) {
                System.out.println(sqlex.getMessage());
            }  catch(Exception e){
                System.out.println(e.getMessage());
            } 
        }
        return prom;
    }   
    public static void modificaPuntos(PromocionesPuntos modificaPromo) throws SQLException{
        int cuenta;
        String query;             
        SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");               
        
        //Inserta información GENERICA de la promoción
        //NOTA: Debería obtener '"+newPromo.getUsuario()+"' en lugar de 1
        query = "UPDATE promocionpuntos set "                
              + "ppu_nom ='"+modificaPromo.getNombre()+"',"
              + "ppu_fei ='"+f.format(modificaPromo.getFechaInicio())+"',"
              + "ppu_fef ='"+f.format(modificaPromo.getFechaFinal())+"',"
              + "ppu_act ="+modificaPromo.isActiva()+","
              + "ppu_pun ="+modificaPromo.getPuntos()+""
              + " WHERE ppu_id = " +modificaPromo.getId();
                                  
        cuenta = ejecuta(query);
                      
        if(cuenta>0){            
            String resp = " " + ObtenerTeclado.dameTecla("Promoción almacenada");            
        }else{
            String resp = " " + ObtenerTeclado.dameTecla("No se almacenó la Promoción");
        }        
    }     
    public static List<Promociones> getPromocioness(Promociones promocion, String filtro){
        List<Promociones> prom = new ArrayList();

        java.util.Date fechaActual = new java.util.Date(); //Obtiene la fecha de hoy
        SimpleDateFormat nDia = new SimpleDateFormat("EEEE");   
        String n = nDia.format(fechaActual).toUpperCase();
        
        Map<String, Integer> dias = new HashMap();

        dias.put("LUNES",1);
        dias.put("MARTES",2);
        dias.put("MIÉRCOLES",3);
        dias.put("JUEVES",4);
        dias.put("VIERNES",5);
        dias.put("SABADO",6);
        dias.put("DOMINGO",7);
        
        Integer numeroDia = dias.get(n);        
        
        Connection con = Persistencia_Conexion.getConnection();
        Statement st=null;
        ResultSet rs=null;
        try {
            st = con.createStatement();
                if(promocion instanceof PromocionesPuntos){

                   String query = "SELECT promocionpuntos.ppu_id,promocionpuntos.ppu_nom,promocionpuntos.ppu_fei,"
                        + "promocionpuntos.ppu_fef,promocionpuntos.ppu_act,"
                        + "promocionpuntos.ppu_pun FROM promocionpuntos";

                    if(!"*".equals(filtro)){
                        query = query + " WHERE promocionpuntos.ppu_nom = '" + filtro + "'";
                    }

                    rs = st.executeQuery(query);

                    while(rs.next()){               

                        PromocionesPuntos e = new PromocionesPuntos(rs.getInt("ppu_id"),rs.getString("ppu_nom"),
                            rs.getDate("ppu_fei"),rs.getDate("ppu_fef"),rs.getBoolean("ppu_act"),
                            rs.getInt("ppu_pun"),"Puntos");

                        prom.add(e);
                    }                                    
                }else if(promocion instanceof PromocionesDiasSemana){
                    String query = "SELECT promociondiafeliz.pdf_id,promociondiafeliz.pdf_nom,promociondiafeliz.pdf_fei,"
                        + "promociondiafeliz.pdf_fef,promociondiafeliz.pdf_act,"
                        + "promociondiafeliz.pdf_dia,promociondiafeliz.pdf_des FROM promociondiafeliz";                          

                    if(filtro!="*"){
                        query = query + " AND promociondiafeliz.pdf_nom = '" + filtro + "'";
                    }

                    rs = st.executeQuery(query);

                    while(rs.next()){               

                        PromocionesDiasSemana e = new PromocionesDiasSemana(rs.getInt("pdf_id"),rs.getString("pdf_nom"),
                            rs.getDate("pdf_fei"),rs.getDate("pdf_fef"),rs.getBoolean("pdf_act"),
                            rs.getInt("pdf_dia"),rs.getInt("pdf_des"),"Día Feliz");

                        prom.add(e);
                    }                                                            
                }else if(promocion instanceof PromocionesGenero){
                    String query = "SELECT promociongenero.pge_id,promociongenero.pge_nom,promociongenero.pge_fei,"
                        + "promociongenero.pge_fef,promociongenero.pge_act,"
                        + "promociongenero.pge_gen,promociongenero.pge_des FROM promociongenero";

                    if(!"*".equals(filtro)){
                        query = query + " WHERE promociongenero.pge_nom = '" + filtro + "'";
                    }

                    rs = st.executeQuery(query);

                    while(rs.next()){               

                        PromocionesGenero e = new PromocionesGenero(rs.getInt("pge_id"),rs.getString("pge_nom"),
                            rs.getDate("pge_fei"),rs.getDate("pge_fef"),rs.getBoolean("pge_act"),
                            rs.getString("pge_gen"),rs.getInt("pge_des"), "Género");

                        prom.add(e);
                    }                    
                }else if(promocion instanceof PromocionesMasPorMenos){
                    String query = "SELECT promocionmaspormenos.pmm_id,promocionmaspormenos.pmm_nom,promocionmaspormenos.pmm_fei,"
                        + "promocionmaspormenos.pmm_fef,promocionmaspormenos.pmm_act,"
                        + "promocionmaspormenos.pmm_alq,promocionmaspormenos.pmm_ent FROM promocionmaspormenos";

                    if(!"*".equals(filtro)){
                        query = query + " WHERE promocionmaspormenos.pmm_nom = '" + filtro + "'";
                    }

                    rs = st.executeQuery(query);

                    while(rs.next()){               

                        PromocionesMasPorMenos e = new PromocionesMasPorMenos(rs.getInt("pmm_id"),rs.getString("pmm_nom"),
                            rs.getDate("pmm_fei"),rs.getDate("pmm_fef"),rs.getBoolean("pmm_act"),
                            rs.getInt("pmm_alq"),rs.getInt("pmm_ent"), "Más por Menos");

                        prom.add(e);
                    }                    
                }
                                                             
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        } catch(Exception e){
            System.out.println(e.getMessage());
        }
        finally{
            try {
                rs.close();
                st.close();
                con.close();
            } catch (SQLException sqlex) {
                System.out.println(sqlex.getMessage());
            }  catch(Exception e){
                System.out.println(e.getMessage());
            } 
        }
        return prom;        
    }
    public static List<Promociones> getPromocionesActivas(Promociones promocion){
        List<Promociones> prom = new ArrayList();
        SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");     
        SimpleDateFormat nDia = new SimpleDateFormat("EEEE");
        int numeroDia=0;
        
        java.util.Date fechaActual = new java.util.Date(); //Obtiene la fecha de hoy
        String n = nDia.format(fechaActual).toUpperCase();
        
        List<String> dias = new ArrayList();
        dias.add("LUNES");
        dias.add("MARTES");
        dias.add("MIÉRCOLES");
        dias.add("JUEVES");
        dias.add("VIERNES");
        dias.add("SABADO");
        dias.add("DOMINGO");
                        
        ListIterator itel = dias.listIterator();
        while (itel.hasNext()) {
            if(itel.next()==n){
                numeroDia = itel.nextIndex();
                break;
            }
         }
        
        Connection con = Persistencia_Conexion.getConnection();
        Statement st=null;
        ResultSet rs=null;
        try {
            st = con.createStatement();
                if(promocion instanceof PromocionesPuntos){

                   String query = "SELECT promocionpuntos.ppu_id,promocionpuntos.ppu_nom,promocionpuntos.ppu_fei,"
                        + "promocionpuntos.ppu_fef,promocionpuntos.ppu_act,"
                        + "promocionpuntos.ppu_pun FROM promocionpuntos"
                        + " WHERE promocionpuntos.ppu_act = true"
                        + " AND '" + f.format(fechaActual) + "'" 
                        + " between promocionpuntos.ppu_fei and promocionpuntos.ppu_fef";
                                           
                    rs = st.executeQuery(query);

                    while(rs.next()){               

                        PromocionesPuntos e = new PromocionesPuntos(rs.getInt("ppu_id"),rs.getString("ppu_nom"),
                            rs.getDate("ppu_fei"),rs.getDate("ppu_fef"),rs.getBoolean("ppu_act"),
                            rs.getInt("ppu_pun"),"Puntos");

                        prom.add(e);
                    }                                    
                }else if(promocion instanceof PromocionesDiasSemana){
                    String query = "SELECT promociondiafeliz.pdf_id,promociondiafeliz.pdf_nom,promociondiafeliz.pdf_fei,"
                        + "promociondiafeliz.pdf_fef,promociondiafeliz.pdf_act,"
                        + "promociondiafeliz.pdf_dia,promociondiafeliz.pdf_des FROM promociondiafeliz"
                        + " WHERE promociondiafeliz.pdf_act = true"
                        + " AND promociondiafeliz.pdf_dia = " + numeroDia + ""
                        + " AND '" + f.format(fechaActual) + "'" 
                        + " between promociondiafeliz.pdf_fei and promociondiafeliz.pdf_fef";
                        

                    rs = st.executeQuery(query);

                    while(rs.next()){               

                        PromocionesDiasSemana e = new PromocionesDiasSemana(rs.getInt("pdf_id"),rs.getString("pdf_nom"),
                            rs.getDate("pdf_fei"),rs.getDate("pdf_fef"),rs.getBoolean("pdf_act"),
                            rs.getInt("pdf_dia"),rs.getInt("pdf_des"),"Día Feliz");

                        prom.add(e);
                    }                                                            
                }else if(promocion instanceof PromocionesGenero){
                    String query = "SELECT promociongenero.pge_id,promociongenero.pge_nom,promociongenero.pge_fei,"
                        + "promociongenero.pge_fef,promociongenero.pge_act,"
                        + "promociongenero.pge_gen,promociongenero.pge_des FROM promociongenero"
                        + " WHERE promociongenero.pge_act = true"
                        + " AND '" + f.format(fechaActual) + "'" 
                        + " between promociongenero.pge_fei and promociongenero.pge_fef";

                    rs = st.executeQuery(query);

                    while(rs.next()){               

                        PromocionesGenero e = new PromocionesGenero(rs.getInt("pge_id"),rs.getString("pge_nom"),
                            rs.getDate("pge_fei"),rs.getDate("pge_fef"),rs.getBoolean("pge_act"),
                            rs.getString("pge_gen"),rs.getInt("pge_des"),"Género");

                        prom.add(e);
                    }                    
                }else if(promocion instanceof PromocionesMasPorMenos){
                    String query = "SELECT promocionmaspormenos.pmm_id,promocionmaspormenos.pmm_nom,promocionmaspormenos.pmm_fei,"
                        + "promocionmaspormenos.pmm_fef,promocionmaspormenos.pmm_act,"
                        + "promocionmaspormenos.pmm_alq,promocionmaspormenos.pmm_ent FROM promocionmaspormenos"
                        + " WHERE promocionmaspormenos.pmm_act = true"
                        + " AND '" + f.format(fechaActual) + "'" 
                        + " between promocionmaspormenos.pmm_fei and promocionmaspormenos.pmm_fef";

                    rs = st.executeQuery(query);

                    while(rs.next()){               

                        PromocionesMasPorMenos e = new PromocionesMasPorMenos(rs.getInt("pmm_id"),rs.getString("pmm_nom"),
                            rs.getDate("pmm_fei"),rs.getDate("pmm_fef"),rs.getBoolean("pmm_act"),
                            rs.getInt("pmm_alq"),rs.getInt("pmm_ent"),"Más por Menos");

                        prom.add(e);
                    }                    
                }
                                                             
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        } catch(Exception e){
            System.out.println(e.getMessage());
        }
        finally{
            try {
                rs.close();
                st.close();
                con.close();
            } catch (SQLException sqlex) {
                System.out.println(sqlex.getMessage());
            }  catch(Exception e){
                System.out.println(e.getMessage());
            } 
        }
        return prom;        
    }    
    public static List<Promociones> getPromocionesActivasTodas(){
        List<Promociones> prom = new ArrayList();
        SimpleDateFormat f = new SimpleDateFormat("yyyy-MM-dd");     
        String query="";
         
        java.util.Date fechaActual = new java.util.Date(); //Obtiene la fecha de hoy
        SimpleDateFormat nDia = new SimpleDateFormat("EEEE");           
        String n = nDia.format(fechaActual).toUpperCase();
        
        Map dias = new HashMap();

        dias.put("LUNES",1);
        dias.put("MARTES",2);
        dias.put("MIÉRCOLES",3);
        dias.put("JUEVES",4);
        dias.put("VIERNES",5);
        dias.put("SABADO",6);
        dias.put("DOMINGO",7);
        
        Integer numeroDia = (Integer) dias.get(n);        
                
        Connection con = Persistencia_Conexion.getConnection();
        Statement st=null;
        ResultSet rs=null;
        try {
            st = con.createStatement();
 
                   query = "SELECT promocionpuntos.ppu_id,promocionpuntos.ppu_nom,promocionpuntos.ppu_fei,"
                        + "promocionpuntos.ppu_fef,promocionpuntos.ppu_act,"
                        + "promocionpuntos.ppu_pun FROM promocionpuntos"
                        + " WHERE promocionpuntos.ppu_act = true"
                        + " AND '" + f.format(fechaActual) + "'" 
                        + " between promocionpuntos.ppu_fei and promocionpuntos.ppu_fef";                                           
                    rs = st.executeQuery(query);

                    while(rs.next()){               
                        PromocionesPuntos e = new PromocionesPuntos(rs.getInt("ppu_id"),rs.getString("ppu_nom"),
                            rs.getDate("ppu_fei"),rs.getDate("ppu_fef"),rs.getBoolean("ppu_act"),
                            rs.getInt("ppu_pun"),"Puntos");
                        prom.add(e);
                    }                                    
 
                    query = "SELECT promociondiafeliz.pdf_id,promociondiafeliz.pdf_nom,promociondiafeliz.pdf_fei,"
                        + "promociondiafeliz.pdf_fef,promociondiafeliz.pdf_act,"
                        + "promociondiafeliz.pdf_dia,promociondiafeliz.pdf_des FROM promociondiafeliz"
                        + " WHERE promociondiafeliz.pdf_act = true"
                        + " AND '" + f.format(fechaActual) + "'" 
                        + " between promociondiafeliz.pdf_fei and promociondiafeliz.pdf_fef"                       
                        + " AND promociondiafeliz.pdf_dia = " + numeroDia.intValue() + "";
                    rs = st.executeQuery(query);

                    while(rs.next()){               
                        PromocionesDiasSemana e = new PromocionesDiasSemana(rs.getInt("pdf_id"),rs.getString("pdf_nom"),
                            rs.getDate("pdf_fei"),rs.getDate("pdf_fef"),rs.getBoolean("pdf_act"),
                            rs.getInt("pdf_dia"),rs.getInt("pdf_des"),"Día Feliz");
                        prom.add(e);
                    }                                                            
 
                    query = "SELECT promociongenero.pge_id,promociongenero.pge_nom,promociongenero.pge_fei,"
                        + "promociongenero.pge_fef,promociongenero.pge_act,"
                        + "promociongenero.pge_gen,promociongenero.pge_des FROM promociongenero"
                        + " WHERE promociongenero.pge_act = true"
                        + " AND '" + f.format(fechaActual) + "'" 
                        + " between promociongenero.pge_fei and promociongenero.pge_fef";
                    rs = st.executeQuery(query);

                    while(rs.next()){               
                        PromocionesGenero e = new PromocionesGenero(rs.getInt("pge_id"),rs.getString("pge_nom"),
                            rs.getDate("pge_fei"),rs.getDate("pge_fef"),rs.getBoolean("pge_act"),
                            rs.getString("pge_gen"),rs.getInt("pge_des"),"Género");
                        prom.add(e);
                    }                    
 
                    query = "SELECT promocionmaspormenos.pmm_id,promocionmaspormenos.pmm_nom,promocionmaspormenos.pmm_fei,"
                        + "promocionmaspormenos.pmm_fef,promocionmaspormenos.pmm_act,"
                        + "promocionmaspormenos.pmm_alq,promocionmaspormenos.pmm_ent FROM promocionmaspormenos"
                        + " WHERE promocionmaspormenos.pmm_act = true"
                        + " AND '" + f.format(fechaActual) + "'" 
                        + " between promocionmaspormenos.pmm_fei and promocionmaspormenos.pmm_fef";
                    rs = st.executeQuery(query);

                    while(rs.next()){               
                        PromocionesMasPorMenos e = new PromocionesMasPorMenos(rs.getInt("pmm_id"),rs.getString("pmm_nom"),
                            rs.getDate("pmm_fei"),rs.getDate("pmm_fef"),rs.getBoolean("pmm_act"),
                            rs.getInt("pmm_alq"),rs.getInt("pmm_ent"),"Más por Menos");
                        prom.add(e);
                    }                                    
                                                             
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        } catch(Exception e){
            System.out.println(e.getMessage());
        }
        finally{
            try {
                rs.close();
                st.close();
                con.close();
            } catch (SQLException sqlex) {
                System.out.println(sqlex.getMessage());
            }  catch(Exception e){
                System.out.println(e.getMessage());
            } 
        }
        return prom;        
    }
    public static Promociones buscaPromociones(String promocionId, Promociones prom){        
        Promociones p = null;
         
        Connection con = Persistencia_Conexion.getConnection();
        Statement st=null;
        ResultSet rs=null;
        String query = null;
        try {
            st = con.createStatement();
  
                if(prom instanceof PromocionesPuntos){

                   query = "SELECT promocionpuntos.ppu_id,promocionpuntos.ppu_nom,promocionpuntos.ppu_fei,"
                        + "promocionpuntos.ppu_fef,promocionpuntos.ppu_act,"
                        + "promocionpuntos.ppu_pun FROM promocionpuntos"
                        + " WHERE promocionpuntos.ppu_id = " + promocionId + "";
                                           
                    rs = st.executeQuery(query);

                    while(rs.next()){               

                        p = new PromocionesPuntos(rs.getInt("ppu_id"),rs.getString("ppu_nom"),
                            rs.getDate("ppu_fei"),rs.getDate("ppu_fef"),rs.getBoolean("ppu_act"),
                            rs.getInt("ppu_pun"),"Puntos");
                    }                                    
                }else if(prom instanceof PromocionesDiasSemana){
                    query = "SELECT promociondiafeliz.pdf_id,promociondiafeliz.pdf_nom,promociondiafeliz.pdf_fei,"
                        + "promociondiafeliz.pdf_fef,promociondiafeliz.pdf_act,"
                        + "promociondiafeliz.pdf_dia,promociondiafeliz.pdf_des FROM promociondiafeliz"
                        + " WHERE promociondiafeliz.pdf_id = " + promocionId + "";
                        
                    rs = st.executeQuery(query);

                    while(rs.next()){               

                        p = new PromocionesDiasSemana(rs.getInt("pdf_id"),rs.getString("pdf_nom"),
                            rs.getDate("pdf_fei"),rs.getDate("pdf_fef"),rs.getBoolean("pdf_act"),
                            rs.getInt("pdf_dia"),rs.getInt("pdf_des"),"Día Feliz");

                    }                                                            
                }else if(prom instanceof PromocionesGenero){
                    query = "SELECT promociongenero.pge_id,promociongenero.pge_nom,promociongenero.pge_fei,"
                        + "promociongenero.pge_fef,promociongenero.pge_act,"
                        + "promociongenero.pge_gen,promociongenero.pge_des FROM promociongenero"
                        + " WHERE promociongenero.pge_id = " + promocionId + "";

                    rs = st.executeQuery(query);

                    while(rs.next()){               

                        p = new PromocionesGenero(rs.getInt("pge_id"),rs.getString("pge_nom"),
                            rs.getDate("pge_fei"),rs.getDate("pge_fef"),rs.getBoolean("pge_act"),
                            rs.getString("pge_gen"),rs.getInt("pge_des"),"Género");
                    }                    
                }else if(prom instanceof PromocionesMasPorMenos){
                    query = "SELECT promocionmaspormenos.pmm_id,promocionmaspormenos.pmm_nom,promocionmaspormenos.pmm_fei,"
                        + "promocionmaspormenos.pmm_fef,promocionmaspormenos.pmm_act,"
                        + "promocionmaspormenos.pmm_alq,promocionmaspormenos.pmm_ent FROM promocionmaspormenos"
                        + " WHERE promocionmaspormenos.pmm_id = " + promocionId + "";
                    
                    rs = st.executeQuery(query);

                    while(rs.next()){               

                        p = new PromocionesMasPorMenos(rs.getInt("pmm_id"),rs.getString("pmm_nom"),
                            rs.getDate("pmm_fei"),rs.getDate("pmm_fef"),rs.getBoolean("pmm_act"),
                            rs.getInt("pmm_alq"),rs.getInt("pmm_ent"),"Más por Menos");
                    }                                
                }
                                                                                             
        } catch (SQLException ex) {
            System.out.println(ex.getMessage());
        } catch(Exception e){
            System.out.println(e.getMessage());
        }
        finally{
            try {
                rs.close();
                st.close();
                con.close();
            } catch (SQLException sqlex) {
                System.out.println(sqlex.getMessage());
            }  catch(Exception e){
                System.out.println(e.getMessage());
            } 
        }
        return p;        
    }         
}
